package br.odb.bzk3.android.gles2;
///**
// * 
// */
//package br.odb.bzk3.android;
//
//import java.io.InputStream;
//
//import javax.microedition.khronos.opengles.GL10;
//
//import android.app.Activity;
//import android.content.Context;
//import android.opengl.GLES20;
//import android.opengl.GLSurfaceView;
//
//import java.io.ByteArrayInputStream;
//import java.io.DataInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.nio.ByteBuffer;
//import java.nio.ByteOrder;
//import java.nio.FloatBuffer;
//import java.util.ArrayList;
//
//import javax.microedition.khronos.egl.EGLConfig;
//import javax.microedition.khronos.opengles.GL10;
//
//import android.content.Context;
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.opengl.GLES20;
//import android.opengl.GLSurfaceView;
//import android.opengl.GLUtils;
//import android.opengl.Matrix;
//import android.os.SystemClock;
//import android.util.Log;
//import android.view.KeyEvent;
//import android.view.MotionEvent;
//import br.borg.R;
//import br.odb.bzk3.geometry.Actor;
//import br.odb.bzk3.geometry.Vec2;
//
//
///**
// * @author monty
// *
// */
//public class EngineView20 extends GLSurfaceView implements Runnable, VirtualPadClient {
//
//	private GLES2Renderer renderer;
//	
//	public EngineView20(Context context) {
//		super( context );
//	    setEGLContextClientVersion(2);
//		people = new ArrayList<Actor>();
//		keyMap = new boolean[9];
//		translations = new Vec2[17];
//
//		renderer = new GLES2Renderer();
//		// translations table - used to speed up and improve usability
//		// add one more, to help with overlapping angles
//		translations[0] = new Vec2(0, 1);
//		translations[1] = new Vec2(0.38, 0.93);
//		translations[2] = new Vec2(0.7, 0.7);
//		translations[3] = new Vec2(0.7, 0.38);
//		translations[4] = new Vec2(1, 0);
//		translations[5] = new Vec2(0.93, -0.38);
//		translations[6] = new Vec2(0.7, -0.7);
//		translations[7] = new Vec2(0.38, -0.93);
//		translations[8] = new Vec2(0, -1);
//		translations[9] = new Vec2(-0.38, -0.93);
//		translations[10] = new Vec2(-0.7, -0.7);
//		translations[11] = new Vec2(-0.93, -0.38);
//		translations[12] = new Vec2(-1, 0);
//		translations[13] = new Vec2(-0.93, 0.38);
//		translations[14] = new Vec2(-0.7, 0.7);
//		translations[15] = new Vec2(-0.38, 0.93);
//		translations[16] = new Vec2(0, 1);
//		setFocusable(true);
//		setClickable(true);
//		setLongClickable(true);
//		setFocusableInTouchMode(true);
//		requestFocus();		
//		setRenderer(renderer);
//	}
//	// ------------------------------------------------------------------------------------------------------------
//	// <android stuff>
//	// WTF?
//	private static final String LOG_TAG = EngineView.class.getSimpleName();
//	private static final long INTERVAL = 50;
//	private boolean running = true;
//	public static boolean loaded = false;
//	// </android stuff>
//
//	// <willie stuff>
//	ArrayList<Actor> people;
//	World world;
//	public int angle;
//	private Vec2[] translations;
//	public Actor cameraActor;
//	public int gotoScreen;
//	private boolean[] keyMap;
////	MediaPlayer mp;
//	// ------------------------------------------------------------------------------------------------------------
//	public World getWorld() {
//		return world;
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//	public String toString() {
//		return world.toString() + "\n" + renderer.toString();
//	}
//
//	
//	
//	public void loadComplete() {
//		cameraActor = people.get(0);
//		renderer.cameraActor = this.cameraActor;
//		for (int c = 0; c < people.size(); c++) {
//			placeActor(people.get(c), people.get(c).Sector);
//			renderer.addToScene(people.get(c));
//		}
//
//		for (int c = 1; c < world.getTotalSectors(); c++)
//			renderer.addToScene(world.getSector(c));
//
//		renderer.buildScene();
//
//	}
//	
//	public void load( InputStream data) {
//
//		gotoScreen = -1;
//		// <willie stuff>
//		angle = 0;
////		Uri uri = Uri.parse("http://jovemnerd.ig.com.br/podpress_trac/web/51269/0/nerdcast_268_old_vs_new_games.mp3");
////		mp = MediaPlayer.create( context, uri);
//		
//	
//
//		// </willie stuff>
//
//		// <android stuff>
//
//
//		renderer.setAngle(angle * 22.5f);
//
//		Thread monitorThread = new Thread(this);
//		monitorThread.setPriority(Thread.MIN_PRIORITY);
//		monitorThread.start();
//		// </android stuff>
//
//		// <init>
//	
//
//		try {
//			InputStream is = getResources().openRawResource(R.raw.riffle);
//			int entries = is.read();
//			byte[] bytes = new byte[10];
//			Triangle t;
//			int range = Byte.MAX_VALUE - Byte.MIN_VALUE;
//			for (int c = 0; c < entries; ++c) {
//
//				is.read(bytes);
//
//				t = new Triangle();
//
//				t.a = (bytes[0] + (-Byte.MIN_VALUE));
//				t.r = (bytes[1] + (-Byte.MIN_VALUE));
//				t.g = (bytes[2] + (-Byte.MIN_VALUE));
//				t.b = (bytes[3] + (-Byte.MIN_VALUE));
//
//				t.x0 = -0.5f + (((bytes[4] + (-Byte.MIN_VALUE)) * 569) / range)
//						/ (569.0f / 1.2f);
//				t.y0 = 0.5f - (((bytes[5] + (-Byte.MIN_VALUE)) * 270) / range) / 270.0f;
//				// Log.d("BZK3","x0: " + t.x0 + " y0: " + t.y0 );
//				t.x1 = -0.5f + (((bytes[6] + (-Byte.MIN_VALUE)) * 569) / range)
//						/ (569.0f / 1.2f);
//				t.y1 = 0.5f - (((bytes[7] + (-Byte.MIN_VALUE)) * 270) / range) / 270.0f;
//
//				t.x2 = -0.5f + (((bytes[8] + (-Byte.MIN_VALUE)) * 569) / range)
//						/ (569.0f / 1.2f);
//				t.y2 = 0.5f - (((bytes[9] + (-Byte.MIN_VALUE)) * 270) / range) / 270.0f;
//
//				renderer.shapes.add(t);
//				t.flatten();
//				t.init();
//			}
//			world = new World(data, people);
//
//			loaded = true;
//
//		} catch (Exception e) {
//
//		}
//		
//		// </init>
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//	public void placeActor(Actor actor, int i) {
//		Sector sector = world.getSector(i);
//		actor.startPoint.x = (sector.getX0() + sector.getWidth() / 2);
//		actor.startPoint.y = (sector.getY0() + sector.getLength() / 2);
//		actor.startPoint.z = (sector.getZ0() + sector.getHeight() / 2);
//		actor.Sector = i;
//		ObjMesh obj = new ObjMesh();
//		obj.internalize( getResources().openRawResource( R.raw.ghost ) );
//		actor.setMesh( obj );
//		obj.moveTo( actor.startPoint );
//
//		
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//	public boolean onTouchEvent(final MotionEvent event) {
//		return true;
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//	@Override
//	public void run() {
//
//		while (running) {
//			if ( !loaded )
//				continue;
//			
//			try {
//				Thread.sleep(INTERVAL);
//			} catch (Exception e) {
//
//			}
//
//			postInvalidate();
//			running = false;
//		}
//
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//	private int clamp(int angle) {
//		int quadrant = angle;
//		while (quadrant < 0) {
//			quadrant += 16;
//		}
//		quadrant = (quadrant) % 16;
//		return quadrant;
//	}
//
//	public boolean onKeyUp(int keyCode, KeyEvent event) {
//		
////		if (keyCode == KeyEvent.KEYCODE_Z) {
////			mp.start();
////		}
////		
////		if (keyCode == KeyEvent.KEYCODE_X) {
////			mp.pause();
////		}
////		
////		if (keyCode == KeyEvent.KEYCODE_C) {
////			mp.stop();
////		}
//
//		
//		
//		if (keyCode == KeyEvent.KEYCODE_W || keyCode == KeyEvent.KEYCODE_DPAD_UP ) {
//			keyMap[VirtualPad.KB_UP] = false;
//		}
//		if (keyCode == KeyEvent.KEYCODE_S || keyCode == KeyEvent.KEYCODE_DPAD_DOWN ) {
//			keyMap[VirtualPad.KB_DOWN] = false;
//		}
//		if (keyCode == KeyEvent.KEYCODE_Q || keyCode == KeyEvent.KEYCODE_DPAD_LEFT ) {
//			keyMap[VirtualPad.KB_LEFT] = false;
//		}
//		if (keyCode == KeyEvent.KEYCODE_E || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT ) {
//			keyMap[VirtualPad.KB_RIGHT] = false;
//		}
//		if (keyCode == KeyEvent.KEYCODE_O) {
//			keyMap[VirtualPad.KB_FIRE2] = false;
//		}
//		if (keyCode == KeyEvent.KEYCODE_L) {
//			keyMap[VirtualPad.KB_FIRE3] = false;
//		}
//
//		if (keyCode == KeyEvent.KEYCODE_BACK)
//			( ( Activity ) getContext() ).finish();
//
//		handleKeys(keyMap);
//		return true;
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//	public boolean onKeyDown(int keyCode, KeyEvent event) {
//
//		if (keyCode == KeyEvent.KEYCODE_W || keyCode == KeyEvent.KEYCODE_DPAD_UP ) {
//			keyMap[VirtualPad.KB_UP] = true;
//		}
//		if (keyCode == KeyEvent.KEYCODE_S || keyCode == KeyEvent.KEYCODE_DPAD_DOWN ) {
//			keyMap[VirtualPad.KB_DOWN] = true;
//		}
//		if (keyCode == KeyEvent.KEYCODE_Q || keyCode == KeyEvent.KEYCODE_DPAD_LEFT ) {
//			keyMap[VirtualPad.KB_LEFT] = true;
//		}
//		if (keyCode == KeyEvent.KEYCODE_E || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT ) {
//			keyMap[VirtualPad.KB_RIGHT] = true;
//		}
//		if (keyCode == KeyEvent.KEYCODE_O) {
//			keyMap[VirtualPad.KB_FIRE2] = true;
//		}
//		if (keyCode == KeyEvent.KEYCODE_L) {
//			keyMap[VirtualPad.KB_FIRE3] = true;
//		}
//
//		if (keyCode == KeyEvent.KEYCODE_BACK)
//			System.exit(0);
//
//		handleKeys(keyMap);
//
//		return true;
//	}
//
//	// ------------------------------------------------------------------------------------------------------------
//
//	@Override
//	public void handleKeys(boolean[] keymap) {
//		float x, y, z;
//		x = 0;
//		y = 0;
//		z = 0;
//		if (keymap[VirtualPad.KB_UP]) {
//			x += translations[clamp(angle)].iX;
//			z -= translations[clamp(angle)].iY;
//
//		}
//
//		if (keymap[VirtualPad.KB_DOWN]) {
//			x -= translations[clamp(angle)].iX;
//			z += translations[clamp(angle)].iY;
//
//		}
//
//		if (keymap[VirtualPad.KB_LEFT]) {
//			this.angle--;
//			renderer.setAngle(angle * 22.5f);
//		}
//
//		if (keymap[VirtualPad.KB_RIGHT]) {
//			this.angle++;
//			renderer.setAngle(angle * 22.5f);
//		}
//
//		if (keymap[VirtualPad.KB_FIRE3]) {
//			y -= 1;
//
//		}
//
//		if (keymap[VirtualPad.KB_FIRE2]) {
//			y += 1;
//		}
//
//		renderer.setAngle(angle * 22.5f);
//		this.cameraActor.startPoint.x += x;
//		this.cameraActor.startPoint.y += y;
//		this.cameraActor.startPoint.z += z;
//		
//		Sector sector = world.getSector(cameraActor.Sector);
//		
//		if ( sector.locateEscapePlane( cameraActor.startPoint ) != 100 ) {
//
//			Log.d("BZK3", "link:" + sector.locateEscapePlane( cameraActor.startPoint ) + " sector:" + cameraActor.Sector + " pos:" + cameraActor.startPoint.toString() );
//			
//			if (sector.GetLink(sector.locateEscapePlane( cameraActor.startPoint ) ) != 0 ) {
//				cameraActor.Sector = sector.GetLink( sector.locateEscapePlane( cameraActor.startPoint ) );
//			} else {
//				cameraActor.startPoint.x -= x;
//				cameraActor.startPoint.y -= y;
//				cameraActor.startPoint.z -= z;
//				x = 0;
//				y = 0;
//				z = 0;
//			}
//		}
//		
//	}	
// }
